package org.dev.hi.hiui.item

import android.view.View
import android.view.ViewGroup
import androidx.annotation.LayoutRes
import androidx.recyclerview.widget.RecyclerView

/**
 * Author WenPing
 * CreateTime 2021/4/18.
 * Description:抽象类 HiDataItem 具体的绑定和实现由派生类实现
 */
abstract class HiDataItem<DATA, VH : RecyclerView.ViewHolder>(data: DATA? = null) {

    val TAG: String = "HiDataItem"
    var hiAdapter: HiAdapter? = null
    var mData: DATA? = null

    init {
        //设置当前的数据
        this.mData = data
    }

    /**
     * 实现hoder数据的绑定
     */
    abstract fun onBindData(vh: VH, position: Int)

    /**
     * 返回改ite的布局资源id
     */

    @LayoutRes
    open fun getItemLayoutRes(): Int = -1

    /**
     * 返回item的视图View
     */
    open fun getItemView(parent: ViewGroup): View? = null

    /**
     * 设置adapter
     */
    fun setAdapter(adapter: HiAdapter) {
        this.hiAdapter = adapter
    }

    /**
     * 刷新当前item的列表
     */
    fun refreshItem() {
        //如果hiAdapter不为null
        hiAdapter?.refreshItem(this)
    }

    /**
     * 从列表上移除当前的item
     */
    fun removeItem() {
        hiAdapter?.removeItem(this)
    }

    /**
     * 该item在列表上占几列，代表的宽度是占满宽度
     */
    open fun getSpanSize(): Int = 0

    /**
     * 在该item被滑动到屏幕里
     */
    open fun onViewAttachedToWindow(holder: VH) {

    }

    /**
     * 在该视图被划出到屏幕里
     */
    open fun onViewDetachedFromWindow(holder: VH) {

    }

    open fun onCreateViewHolder(parent: ViewGroup): VH? = null


}